home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MYUTIL / MAKEFAT.M < prev    next >
Encoding:
Text File  |  1989-03-10  |  2.8 KB  |  110 lines

  1. MODULE MakeFAT;
  2.  
  3. (*
  4.  * Erzeugt einen Dummy-FAT Sektor (512 Byte), der aufsteigend alle Werte von
  5.  *  $xx00 bis $xxFF enthält.
  6.  *)
  7.  
  8. FROM SYSTEM IMPORT VAL, BYTE, ADR;
  9.  
  10. FROM SysUtil0 IMPORT VarEqual;
  11.  
  12. FROM BIOS IMPORT DriveMap, DriveSet, RWAbs, BPB, BPBPtr, RW, GetBPB;
  13.  
  14. FROM InOut IMPORT WriteString, WriteCard, WriteLn, GotoXY, WritePg;
  15. IMPORT InOut;
  16.  
  17.  
  18. PROCEDURE drvno (c:CHAR): CARDINAL;
  19.   BEGIN
  20.     RETURN ORD (CAP (c)) - ORD ('A')
  21.   END drvno;
  22.  
  23. TYPE CharSet = SET OF CHAR;
  24.  
  25. VAR sd, dd: CHAR;
  26.     i, hibyte, sn, dn: CARDINAL;
  27.     drives: DriveSet;
  28.     p: BPBPtr;
  29.     inf: ARRAY [0..31] OF BPB;
  30.     ch: CHAR;
  31.     l: LONGINT;
  32.     bufbls, blno, restbls, bls: CARDINAL;
  33.  
  34.     sec: ARRAY [0..511] OF BYTE;
  35.  
  36.  
  37. PROCEDURE info (n: CARDINAL);
  38.   BEGIN
  39.     WriteString ('  Drive ');
  40.     WriteString (CHR (n + ORD ('A')));
  41.     WriteString (':');
  42.     WriteLn;
  43.     WriteString ('  Size: ');
  44.     IF inf[n].clsizb <> 1024 THEN HALT END;
  45.     WriteCard (inf [n].numcl,0);
  46.     WriteString (' KB');
  47.     WriteLn;
  48.   END info;
  49.  
  50. PROCEDURE swap (VAR a: ARRAY OF BYTE);
  51.   VAR h: BYTE;
  52.   BEGIN
  53.     h:= a[0];
  54.     a[0]:= a[1];
  55.     a[1]:= h
  56.   END swap;
  57.   
  58.  
  59. BEGIN
  60.   drives:= DriveMap ();
  61.   WriteLn;
  62.   WriteString ('Make FAT Sector');
  63.   WriteLn;
  64.   WriteLn;
  65.   
  66.   WriteString ('Drive (C-P) ? ');
  67.   InOut.Read (sd); sd:= CAP (sd);
  68.   IF NOT ( sd IN CharSet {'C'..'P'} ) THEN RETURN END;
  69.   IF NOT ( drvno (sd) IN drives ) THEN RETURN END;
  70.   WriteLn;
  71.   
  72.   sn:= drvno (sd);
  73.   
  74.   p:= GetBPB (sn);
  75.   IF p = NIL THEN WriteString ('Not online'); InOut.Read (ch); RETURN END;
  76.   inf[sn]:= p^;
  77.   
  78.   WriteLn;
  79.   WriteString ('Info: ');
  80.   WriteLn;
  81.   info (sn);
  82.  
  83.   WriteLn;
  84.   WriteString ('Hi-Byte ? ');
  85.   InOut.ReadCard (hibyte);
  86.  
  87.   WriteLn;
  88.   WriteString ('Sector no. ? ');
  89.   InOut.ReadCard (blno);
  90.  
  91.   FOR i:= 0 TO 255 DO
  92.     sec [i*2]:= VAL (BYTE, i+1);
  93.     sec [i*2+1]:= VAL (BYTE, hibyte)
  94.   END;
  95.   INC (sec [511]);
  96.   
  97.   l:= RWAbs (Write, ADR (sec), 1, blno, sn);
  98.   IF l # 0L THEN
  99.     WriteLn; WriteString ('Write error!'); InOut.Read (ch);
  100.     RETURN
  101.   END;
  102.  
  103.   WriteLn;
  104.   WriteString ('Sector successfully written');
  105.   InOut.Read (ch);
  106.  
  107. END MakeFAT.
  108.  
  109. (* $0000072B$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$0000072D$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912F$FFF3912FÇ$000007A0T.......T.......T.......T.......T.......T.......T.......T.......T.......T.......$000000A8$0000078F$0000076F$00000779$0000078E$00000217$0000078F$000007AF$000007A0$00000722$00000882$000006E4$000007AF$000002D4$FFF458C4$000002DD¿ÇÇ*)
  110.